#include "mystring.hpp"

int main()
{
    // sl::string s;
    // s.push_back('h');
    // s.push_back('e');
    // s.push_back('l');
    // s.push_back('l');
    // s.push_back('o');

    // s += " linux";

    // cout << s.c_str() << endl;

    // sl::string s1("hello linux");
    // cout << s1.c_str() << endl;

    // // sl::string s2 = s1.erase(5, std::string::npos);
    // // cout << s1.c_str() << endl;

    // sl::string s2 = s1.insert(5, "hhhhh");
    // cout << s1.c_str() << endl;


    // sl::string s1("hello linux");
    // sl::cout << s1 << endl;

    return 0;

}


class string
{
private:
    char* _str;

public:
    string(const char* str = "")
    {
        if(nullptr == str)
        {
            assert(str);
            return;
        }

        _str = new char[strlen(str) + 1];
        strcpy(_str, str);
    }

    // string(const string& s)
    //     : _str(new char[strlen(s._str) + 1])
    // {
    //     strcpy(_str, s._str);
    // }

    void swap(string& s)
    {
        std::swap(_str, s._str);
    }

    string(const string& s)
    {
        string tmp(s._str);
        swap(tmp);
    }

    // string& operator=(const string& s)
    // {
    //     if(this != &s)
    //     {
    //         char* tmp = new char[strlen(s._str) + 1];
    //         strcpy(tmp, s._str);
    //         delete[] _str;
    //         _str = nullptr;
    //     }

    //     return *this;
    // }

    string& operator=(string s)
    {
        swap(s);
        return *this;
    }

    ~string()
    {
        if(_str)
        {
            delete[] _str;
            _str = nullptr;
        }
    }
};



